#include <iostream>

class Integer
{
public:
    //explicit：防止隐式转换 保证安全
    //this指针：指向当前类的对象
    //初始化列表：分配空间时把初始值给上，为了解决const变量的初始化问题
    //  const成员变量必须在初始化列表中进行初始化
    explicit Integer(int a):a(a),b(b),c(new int)
    {
        std::cout << "constructor!" << std::endl;
    }
    Integer(const Integer& a):a(a.a)
    {
        std::cout << "copy constructor!" << std::endl;
    }
    int GetA()
    {
        return this->a;
    }
    Integer Copy()
    {
        //取当前对象——调用拷贝构造函数
        return *this;
    }
private:
    const int a;
    int b;
    int *c;
};

int main()
{
    Integer i(10);
    //i = Integer(20);//i = 20 编译器的隐式转换
    std::cout << i.Copy().GetA() << std::endl;
    return 0;
}

